import { PrismaClient } from '@prisma/client';
import { logger } from '../utils/logger';

// 创建Prisma客户端实例
const prisma = new PrismaClient({
  log: [
    {
      emit: 'event',
      level: 'query',
    },
    {
      emit: 'event',
      level: 'error',
    },
    {
      emit: 'event',
      level: 'info',
    },
    {
      emit: 'event',
      level: 'warn',
    },
  ],
});

// 查询日志
prisma.$on('query', (e) => {
  logger.debug('Query: ' + e.query);
  logger.debug('Params: ' + e.params);
  logger.debug('Duration: ' + e.duration + 'ms');
});

// 错误日志
prisma.$on('error', (e) => {
  logger.error('Prisma Error: ' + e.message);
});

// 信息日志
prisma.$on('info', (e) => {
  logger.info('Prisma Info: ' + e.message);
});

// 警告日志
prisma.$on('warn', (e) => {
  logger.warn('Prisma Warning: ' + e.message);
});

// 连接数据库
export async function connectDatabase(): Promise<void> {
  try {
    await prisma.$connect();
    logger.info('数据库连接成功');
  } catch (error) {
    logger.error('数据库连接失败:', error);
    throw error;
  }
}

// 断开数据库连接
export async function disconnectDatabase(): Promise<void> {
  try {
    await prisma.$disconnect();
    logger.info('数据库连接已断开');
  } catch (error) {
    logger.error('断开数据库连接失败:', error);
    throw error;
  }
}

// 导出Prisma客户端
export { prisma }; 